package com.dayu.recovery.service;

import java.util.List;
import java.util.Map;

import com.dayu.recovery.domain.RecoveryBill;
import com.dayu.recovery.domain.RecoveryData;
import com.dayu.recovery.domain.export.BillAndCollectExport;

/**
 * 财务账单Service接口
 * 
 * @author HK
 * @date 2021-04-16
 */
public interface IRecoveryBillService 
{
    /**
     * 查询财务账单
     * 
     * @param billId 财务账单ID
     * @return 财务账单
     */
    public RecoveryBill selectRecoveryBillById(Long billId);

    /**
     * 财务账单列表，个人专用
     * @param recoveryBill
     * @return
     */
    public List<RecoveryBill> selectRecoveryBillBySellList(RecoveryBill recoveryBill);

    /**
     * 查询财务账单列表
     * 
     * @param recoveryBill 财务账单
     * @return 财务账单集合
     */
    public List<RecoveryBill> selectRecoveryBillList(RecoveryBill recoveryBill);

    /**
     * 导出数据
     * @param recoveryBill
     * @return
     */
    public List<BillAndCollectExport> selectRecoveryBillListExport(RecoveryBill recoveryBill);
    /**
     * 新增财务账单
     * 
     * @param recoveryBill 财务账单
     * @return 结果
     */
    public int insertRecoveryBill(RecoveryBill recoveryBill);

    /**
     * 修改财务账单
     * 
     * @param recoveryBill 财务账单
     * @return 结果
     */
    public int updateRecoveryBill(RecoveryBill recoveryBill);

    /**
     * 批量删除财务账单
     * 
     * @param billIds 需要删除的财务账单ID
     * @return 结果
     */
    public int deleteRecoveryBillByIds(Long[] billIds);

    /**
     * 删除财务账单信息
     * 
     * @param billId 财务账单ID
     * @return 结果
     */
    public int deleteRecoveryBillById(Long billId);

    /**
     * 批量出售商品
     * @param list
     * @return
     */
    public int sellGoodsByList(List<RecoveryBill> list);

    /***
     * 退货处理
     * @param recoveryBill
     * @return
     */
    public int returnGoodsByBill(RecoveryBill recoveryBill);

    /**
     * 成本 销售 利润
     * @param bill
     * @return
     */
    public RecoveryData selectRecoveryData(RecoveryBill bill);

    /**
     * 条件统计 筛选 获得支付方式
     * @param reqMap  timeType: 开始时间(天：day, 周：week, 月: mouth) hasPayee: 是否根据账户区分
     * @return
     */
    public List<Map<String, Object>> conditionSearch(Map<String, Object> reqMap);

    /**
     * 批量审核
     * @param ids
     * @return
     */
    public int updateRecoveryBillByList(Long[] ids);
}
